"""
时间处理工具函数
提供安全的时间格式化方法，避免字符串类型错误
"""

from datetime import datetime, date, time
from typing import Union, Optional


def safe_strftime(time_obj: Union[datetime, date, time, str, None], format_str: str) -> Optional[str]:
    """
    安全的时间格式化函数，支持多种类型的时间对象
    
    Args:
        time_obj: 时间对象，可以是datetime、date、time、字符串或None
        format_str: 格式化字符串，如'%Y-%m-%d %H:%M:%S'
        
    Returns:
        格式化后的时间字符串，如果输入为None则返回None
    """
    if not time_obj:
        return None
    
    # 如果已经是字符串，直接返回
    if isinstance(time_obj, str):
        return time_obj
    
    # 尝试格式化
    try:
        return time_obj.strftime(format_str)
    except (AttributeError, TypeError, ValueError):
        # 如果格式化失败，返回字符串形式
        return str(time_obj)


def safe_datetime_format(dt: Union[datetime, str, None]) -> Optional[str]:
    """格式化datetime为标准格式 YYYY-MM-DD HH:MM:SS"""
    return safe_strftime(dt, '%Y-%m-%d %H:%M:%S')


def safe_date_format(d: Union[date, datetime, str, None]) -> Optional[str]:
    """格式化date为标准格式 YYYY-MM-DD"""
    return safe_strftime(d, '%Y-%m-%d')


def safe_time_format(t: Union[time, datetime, str, None]) -> Optional[str]:
    """格式化time为标准格式 HH:MM"""
    return safe_strftime(t, '%H:%M')


def safe_time_format_with_seconds(t: Union[time, datetime, str, None]) -> Optional[str]:
    """格式化time为标准格式 HH:MM:SS"""
    return safe_strftime(t, '%H:%M:%S')
